local redisStatusValue = redis.call('get', KEYS[1])
if (redisStatusValue == nil or redisStatusValue == false)
then
    redis.call('setex', KEYS[1], 28800, ARGV[1])
    return ARGV[1]
else
    --导入状态的变化值
    local statusValue = cjson.decode(ARGV[1])
    local totalValue = tonumber(statusValue.totalNum)
    local successValue = tonumber(statusValue.successNum)
    local errorValue = tonumber(statusValue.errorNum)
    local updateValue = tonumber(statusValue.updateNum)
    local noSignValue = tonumber(statusValue.noSignNum)

    local redisStatusValueTable = cjson.decode(redisStatusValue)
    local redisTotalValue = tonumber(redisStatusValueTable.totalNum)
    local redisSuccessValue = tonumber(redisStatusValueTable.successNum)
    local redisErrorValue = tonumber(redisStatusValueTable.errorNum)
    local redisUpdateValue = tonumber(redisStatusValueTable.updateNum)
    local redisNoSignValue = tonumber(redisStatusValueTable.noSignNum)

    if (redisTotalValue == nil or redisTotalValue ~= totalValue)
    then
        if (redisTotalValue < totalValue) then
            redisStatusValueTable.totalNum = totalValue
        end
    end

    if (redisSuccessValue == nil)
    then
        redisStatusValueTable.successNum = successValue
    else
        redisStatusValueTable.successNum = redisSuccessValue + successValue
    end

    if (redisErrorValue == nil)
    then
        redisStatusValueTable.errorNum = errorValue
    else
        redisStatusValueTable.errorNum = redisErrorValue + errorValue
    end

    if (redisUpdateValue == nil)
    then
        redisStatusValueTable.updateNum = updateValue
    else
        redisStatusValueTable.updateNum = redisUpdateValue + updateValue
    end

    if (redisNoSignValue == nil)
    then
        redisStatusValueTable.noSignNum = noSignValue
    else
        redisStatusValueTable.noSignNum = redisNoSignValue + noSignValue
    end

    local decrNum = tonumber(ARGV[2])
    if (decrNum ~= 0)
    then
        local redisFragmentationNum = tonumber(redisStatusValueTable.fragmentationNum) - decrNum
        redisStatusValueTable.fragmentationNum = redisFragmentationNum
        if (redisFragmentationNum == 0)
        then
            redisStatusValueTable.finish = 'true'
            local actualTotalNum = redisStatusValueTable.successNum + redisStatusValueTable.errorNum + redisStatusValueTable.updateNum + redisStatusValueTable.noSignNum
            if (actualTotalNum ~= redisStatusValueTable.totalNum)
            then
                redisStatusValueTable.totalNum = actualTotalNum
            end
        end
    end


    local redisStatusValueTableStr = cjson.encode(redisStatusValueTable)
    redis.call('setex', KEYS[1], 28800, redisStatusValueTableStr)

    return redisStatusValueTableStr
end